package com.djzh.insightconnector.mockproject.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * 互联互通基础请求实体类，适用于业务节点目录查询等互联互通接口的通用请求参数
 * @author leo
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ConnectivityBaseRequest {

    /**
     * 过滤器列表，可选，多个过滤条件是and的关系
     */
    private List<Filter> filters;

    /**
     * 排序器列表，可选，不指定将采用默认排序
     */
    private List<Order> orders;

    /**
     * 查询偏移量，可选，返回结果的偏移量，从0开始
     */
    private Integer offset;

    /**
     * 限制条数，可选，返回结果的最大条数
     */
    private Integer limit;

    /**
     * 过滤器内部类
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Filter {
        /**
         * 过滤属性，必选，参见响应体中字段列表
         */
        private String filterProperty;

        /**
         * 过滤操作，必选，默认操作是=，支持>、<、between等操作（参考NDI—TR—2025—06）
         */
        private String filterOperation;

        /**
         * 过滤值，必选，根据过滤操作而定：
         * - 操作是=或like时，为简单类型（String、Boolean或Int）；
         * - 操作是in或contain时，为数组类型；
         * - 操作是between时，为包含两个元素的数组（>=并且<=）
         */
        private Object filterValue;
    }

    /**
     * 排序器内部类
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Order {
        /**
         * 排序属性，必选
         * 系统级：OVERALL（综合排序）、MATCH（关键词匹配度排序）；
         * 属性级：createTime（按创建时间排序）、upDatetime（按更新时间排序）等
         */
        private String orderProperty;

        /**
         * 排序方向，必选，ASC（升序）、DESC（降序）
         */
        private String orderDirection;
    }
}